"""Definition of the Contrato content type
"""

from AccessControl import ClassSecurityInfo

from zope.interface import implements, directlyProvides

from Products.Archetypes import atapi
from Products.Archetypes import utils
from Products.ATContentTypes.content import base
from Products.ATContentTypes.content import schemata

from guegue.alcaldias import alcaldiasMessageFactory as _
from guegue.alcaldias.interfaces import IContrato
from guegue.alcaldias.config import PROJECTNAME

ContratoSchema = schemata.ATContentTypeSchema.copy() + atapi.Schema((

    # -*- Your Archetypes field definitions here ... -*-
    atapi.StringField('title',
                searchable=1,
                isMetadata=0,
                accessor='Title',
                widget=atapi.StringWidget(label='Título',
                                      maxlength=150,
                                      size=30,
                                      label_msgid="label_entry_title",
                                      description_msgid="help_entry_title",
                                      i18n_domain="guegue.alcaldias",
                                      description='')),
    atapi.StringField('description',
                searchable=1,
                isMetadata=0,
                accessor='Description',
                widget=atapi.TextAreaWidget(label='Descripción',
                                      label_msgid="label_entry_description",
                                      description_msgid="help_entry_description",
                                      i18n_domain="guegue.alcaldias",
                                      description='Entre una breve descripción de la contrato.')),
    atapi.StringField('numero',
                searchable=1,
                isMetadata=0,
                widget=atapi.StringWidget(label='No. de contrato',
                                      maxlength=9,
                                      size=12,
                                      label_msgid="label_entry_numero",
                                      description_msgid="help_entry_numero",
                                      i18n_domain="guegue.alcaldias",
                                      description='')),
    atapi.StringField('tipo:',
                searchable=1,
                isMetadata=0,
                vocabulary=['Servicios Técnicos y Profesionales','Servicios complementarios / Generales','Servicios de Consultoría','Adquisición de Bienes','Arrendamiento de Bienes Inmuebles','Contrato de Obras','Arrendamiento de Equipos','Otro'],
                widget=atapi.SelectionWidget(label='Tipo de Contrato',
                                      maxlength=150,
                                      size=30,
                                      label_msgid="label_entry_tipo",
                                      description_msgid="help_entry_tipo",
                                      i18n_domain="guegue.alcaldias",
                                      description='')),
    atapi.StringField('ganador',
                searchable=1,
                isMetadata=0,
                widget=atapi.StringWidget(label='Institución(es) ganadora(s) o Nombre del Consultor',
                                      maxlength=150,
                                      size=30,
                                      label_msgid="label_entry_ganador",
                                      description_msgid="help_entry_ganador",
                                      i18n_domain="guegue.alcaldias",
                                      description='Institución(es) ganadora(s) o Nombre del Consultor (Si es individual)')),
    atapi.DateTimeField('fecha',
                searchable=0,
                required=0,
                widget=atapi.CalendarWidget(label='Fecha inicio',
                                      label_msgid="label_entry_fecha",
                                      show_hm = False,
                                      description_msgid="help_entry_fecha",
                                      i18n_domain="guegue.alcaldias",
                                      description='Fecha de inicio')),
    atapi.DateTimeField('fechafin',
                searchable=0,
                required=0,
                widget=atapi.CalendarWidget(label='Fecha fin',
                                      label_msgid="label_entry_fechafin",
                                      show_hm = False,
                                      description_msgid="help_entry_fechafin",
                                      i18n_domain="guegue.alcaldias",
                                      description='Fecha de finalizacion')),
    atapi.StringField('dependencia',
                searchable=1,
                isMetadata=0,
                vocabulary="getDependencias",
                widget=atapi.SelectionWidget(label='Unidad/dependencia asociada',
                                      label_msgid="label_entry_dependencia",
                                      description_msgid="help_entry_dependencia",
                                      i18n_domain="guegue.alcaldias",
                                      description='')),
    atapi.StringField('cuantia',
                searchable=1,
                isMetadata=0,
                widget=atapi.StringWidget(label='Cuantia',
                                      maxlength=150,
                                      size=30,
                                      label_msgid="label_entry_cuantia",
                                      description_msgid="help_entry_cuantia",
                                      i18n_domain="guegue.alcaldias",
                                      description='')),
    atapi.StringField('licitacion',
                searchable=1,
                isMetadata=0,
                vocabulary="getLicitaciones",
                widget=atapi.SelectionWidget(label='No. de Licitación',
                                      label_msgid="label_entry_licitacion",
                                      description_msgid="help_entry_licitacion",
                                      i18n_domain="guegue.alcaldias",
                                      description='No. de Licitación (o cualquier otra modalidad que dio origen al contrato)')),
    atapi.TextField('body',
              searchable=1,
              required=0,
              primary=1,
              default_content_type='text/html',
              default_output_type='text/html',
              allowable_content_types=('text/plain','text/structured', 'text/html', 'text/restructured'),
              widget=atapi.RichWidget(label='Observaciones y/o Comentarios adicionales',
                                label_msgid="label_entry_body",
                                description_msgid="help_entry_body",
                                i18n_domain="guegue.alcaldias",
                                description="Puede entrar el texto completo de la contrato.")),
    atapi.FileField('adjunto',
              searchable=0,
              required=0,
              widget=atapi.FileWidget(label='Contrato',
                                label_msgid="label_entry_adjunto",
                                description_msgid="help_entry_adjunto",
                                i18n_domain="guegue.alcaldias",
                                description='Adjuntar Contrato')),

))

# Set storage on fields copied from ATContentTypeSchema, making sure
# they work well with the python bridge properties.

schemata.finalizeATCTSchema(ContratoSchema, moveDiscussion=False)

class Contrato(base.ATCTContent):
    """Tipo de datos para contratos"""
    implements(IContrato)

    def getDependencias(self):
        dl = utils.DisplayList()
        linklist = self.portal_catalog.searchResults(portal_type='Dependencia')
        for link in linklist:
            dl.add(link['id'], link['Title'])
        return dl
    def getLicitaciones(self):
        dl = utils.DisplayList()
        linklist = self.portal_catalog.searchResults(portal_type='Licitacion')
        for link in linklist:
            dl.add(link['id'], link['Title'])
        return dl

    portal_type = "Contrato"
    schema = ContratoSchema

    #title = atapi.ATFieldProperty('title')
    #description = atapi.ATFieldProperty('description')

atapi.registerType(Contrato, PROJECTNAME)
